<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        /**
         *  创建对象方式
         * 1、自变量方式
         * + var ob {....}
         * + 可以后期动态添加
         * 2 内置构造函数创建对象
         * + var obj = new Object()
         * + 后期动态添加
         * 3、工厂函数创建对象
         *  3-1 .制造一个工厂函数
         * 3-2 使用工厂函数去创建对象
         * 
         * 4、自定义构造函数创建对象
         * 4-1、制造一个自定义构造函数
         * 4-2、使用自定义构造函数去创建对象
         * 
        */


        // function createObj() {
        //     var obj = {}

        //     obj.name = "kk"
        //     obj.age = 12
        //     obj.sayHi = function () {
        //         console.log("ssssssss");
        //     }
        //     return obj

        // }
        // // 使用工厂函数
        // var obj1 = createObj();
        // var obj2 = createObj();
        // console.log(obj1);
        // console.log(obj2);

        // 自定义构造函数创建对象
        function createObj() {
            // 制造一个自定义构造函数
            /**
             * 构造函数会自动创建对象 自动返回这个对象
             * 我们只需要手动添加内容就可以
             * 
            */
        //    自动创建对象

        // 手动向对象里面添加成员
        // 这里的 this  指向当前实例（new 前面的变量）
            this.name ="jjj"
            this.age = 218
            this.sayHi = function(){
                console.log("sssssssssss");
            }
        // 自动返回对象

        }
        // 使用自定义函数去创建对象
        // 构造函数在使用的时候 需要和new 关键字连用
        // 不练用不没有意义


            // 第一， 二次调佣 createObj 的时候，和new 关键字连用
            // 我们createObj 里面的this 指向obj1

            // 函数内部的代码在执行的时候，就是在向obj1 添加 name age 和sayHi 三个成员

        var obj1 = new createObj()

        var obj2 = new createObj()


    </script>

</body>

</html>